package com.aiwiown.snackmq.cluster.raft;

import lombok.Data;

/**
 * Raft 节点配置的标准化数据传输对象 (DTO)。
 * 它整合了启动一个 Raft 节点所需的所有信息。
 */
@Data // 使用 Lombok @Data 自动生成 getters, setters, toString, equals, hashCode
public class SnackMQRaftNodeConfig {
    /**
     * Raft 节点所属的组 ID。
     * 用于区分不同的 Raft 集群。
     */
    private String groupId;

    /**
     * Raft 节点数据存储路径。
     * 用于保存 Raft 协议相关的持久化数据。
     */
    private String raftDataPath;

    /**
     * 初始的 Raft 配置信息。
     * 包含了 Raft 节点的初始成员信息等。
     */
    private String initialConf;

    /**
     * Raft 节点的主机名或 IP 地址。
     * 用于网络通信。
     */
    private String host;

    /**
     * Raft 节点的端口号。
     * 用于网络通信。
     */
    private int raftPort;

    /**
     * Raft 选举超时时间，默认为 1000 毫秒。
     * 如果在这个时间内节点没有收到领导者的心跳，它将开始选举。
     */
    private int electionTimeoutMs = 1000; // 默认选举超时时间

    /**
     * 快照间隔时间（秒）
     */
    private int snapshotIntervalSecs = 3600;
}
